Spring Security | Note-1

Spring Security Note-1


认证和授权

对于服务的安全考虑,认证和授权是一个非常重要,并且有难度的点;

它的最终表现形式之一是登录;

解决问题

同时支持多种认证方式(传统,手机短信,微信,QQ等);

同时支持多种前端渠道(浏览器,APP);

支持集群环境,跨应用工作,SESSION控制,控制用户权限,防护与身份认证相关的攻击;

目的

打造可重用的,企业级的,认证和授权模块;

涉及技术

Spring Security,Spring Social,Spring Security OAuth;

目标

理解Spring Security以及相关框架的原理、功能;

基于Spring Security以及相关框架独立开发认证授权相关功能;

掌握抽象和封装的常用技巧,编写可重用的模块;


项目结构

security:主模块(统一执行命令)

security-core:核心业务逻辑(实现基本安全的方式)

security-browser:浏览器安全逻辑

security-app:app安全逻辑

security-demo:样例程序


工程搭建

在创建完所有的过程后;

首先对security的pom进行配置,引入dependencyManagement管理Maven项目的版本(自动管理其他依赖的版本,只需要告诉项目什么依赖即可,不需要指定版本,保证互相兼容);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Brussels-SR12</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<!--引入插件,maven的编译工具,指定JDK和编译的版本为1.8-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-complier-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>

<modules>
<module>../security-app</module>
<module>../security-browser</module>
<module>../security-core</module>
<module>../security-demo</module>
</modules>

接下来,在core项目中,添加pom依赖,依赖过多,不与展示;

添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!--不需要添加version,由主项目的dependencyManagement控制版本,保证互相兼容-->
<dependencies>
<!--Spring Security & OAuth2认证-->

<!--Redis缓存-->

<!--JDBC数据库-->

<!--MYSQL驱动-->

<!--Spring Social-->

<!--commons工具包-->

</dependencies>

接下来,在app和browser项目中,添加core依赖即可;

1
2
3
4
5
6
7
<dependencies>
<dependency>
<groupId>com.imooc.security</groupId>
<artifactId>imooc-security-core</artifactId>
<version>${imooc.security.version}</version>
</dependency>
</dependencies>

browser项目与app有略微不同,是一个web项目,所以需要添加spring-session依赖;

1
2
3
4
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
</dependency>

demo项目则引用browser依赖;

1
2
3
4
5
6
7
<dependencies>
<dependency>
<groupId>com.imooc.security</groupId>
<artifactId>imooc-security-browser</artifactId>
<version>${imooc.security.version}</version>
</dependency>
</dependencies>

Hello项目

首先依赖的有关数据库的包,需要先对数据库连接进行配置;

暂时先对spring-session的配置,暂时关闭;

1
2
3
4
5
6
7
8
9
# datasource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxx?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=xxxx
# session
spring.session.store-type=none
# spring-security
security.basic.enabled=false

此时访问http://localhost:8081/hello 需要帐号密码才能访问;

这是由于spring-security的默认配置,这里我们先暂时关闭;

如果我们需要将项目打包成可上线的包的形式,则需要在demo的pom文件中,添加一个插件;

用作打包的插件,按照Spring Boot的特有方式,进行打包;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.3.3.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>demo</finalName>
</build>

此时maven进行 clean package的命令;

在demo文件下的target的目录下,有两个人jar包;

一个叫demo.jar(可执行jar包),一个demo.jar.original(原始文件);